using System;
using System.Collections.Generic;
using System.Text;

namespace Mpi.Common.Collections
{
   //public class IdentifiableObjectDictionary<IdType,ObjectType>:IEnumerable<ObjectType> where ObjectType : class, IIdentifiableObject<IdType> where IdType : IComparable<IdType>
   
   // {
   //     private SortedDictionary<IdType, ObjectType> dict;

   //     private object owner;

   //     public object Owner
   //     {
   //         get { return owner; }
   //         set { owner = value; }
   //     }
   //     public IdType[] Identifiers
   //     {
   //         get
   //         {
   //             List<IdType> temp = new List<IdType>();
   //             foreach (IdType id in this.dict.Keys)
   //             {
   //                 temp.Add(id);
   //             }
   //             return temp.ToArray();
   //         }
   //     }

   //     public int Count
   //     {
   //         get { return dict.Count; }
   //     }

   //     public ObjectType this[IdType ts]
   //     {
   //         get
   //         {
   //             return this.dict[ts];
   //         }
   //     }

   //    public ObjectType this[int indx]
   //    {
   //        get
   //        {
   //            int i = 0;
   //            foreach (IdType id in this.dict.Keys)
   //            {
   //                if (i == indx)
   //                    return this[id];
   //                i++;
   //            }
   //            throw new ArgumentOutOfRangeException("indx");
   //        }
   //    }

   //     public IdentifiableObjectDictionary()
   //     {
   //         this.dict = new SortedDictionary<IdType, ObjectType>();
   //     }

   //     public bool Contains(IdType id)
   //     {
   //         return this.dict.ContainsKey(id);
   //     }


    

   //     public void Add(ObjectType to)
   //     {
   //         IIdentifiableObject<IdType> t = to as IIdentifiableObject<IdType>;
   //         this.dict.Add(t.ObjectIdentifiere, to);
   //         t.CollectionObject = this;

   //         t.IdentifiereChanged += new EventHandler<IdentifiereChangedEventArgs<IdType>>(t_IdentifiereChanged);
   //         OnItemAdded(to);
   //     }

   //     void t_IdentifiereChanged(object sender, IdentifiereChangedEventArgs<IdType> e)
   //     {
   //         if (e.OldId.CompareTo(e.NewId) != 0)
   //         {
   //             ObjectType to = sender as ObjectType;
   //             lock (this.dict)
   //             {
   //                 this.dict.Add(e.NewId, null);
   //                 this.dict.Remove(e.OldId);
   //                 this.dict[e.NewId] = to;
   //             }
   //         }
   //     }

   //     public void Remove(IdType id)
   //     {
   //         ObjectType item = this[id];
   //         this.dict.Remove(id);
   //         OnItemRemoved(item);
   //     }

   //     //void to_TimeChanged(object sender, IdentifiereChangedEventArgs<IdType> e)
   //     //{
            
   //     //}

   //     #region IEnumerable<ObjectType> Members

   //     public IEnumerator<ObjectType> GetEnumerator()
   //     {
   //         //foreach (IIdentifiableObject to in this.dict.Values)
   //         //{
   //         //    IEnumerator<ObjectType> it;
   //         //    it = 
   //         //    yield return to as IEnumerator<ObjectType>;
   //         //}
   //         return (IEnumerator<ObjectType>)this.dict.Values.GetEnumerator();
   //         //throw new NotImplementedException();
   //     }

   //     #endregion

   //     #region IEnumerable Members

   //     System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
   //     {
   //         return this.dict.Values.GetEnumerator();
   //     }

   //     #endregion

   //     public void Clear()
   //     {
   //         this.dict.Clear();
   //         OnCleared();

   //     }


   //    public event EventHandler Cleared;
   //     public event EventHandler<ItemEventArgs<ObjectType>> ItemAdded;
   //     public event EventHandler<ItemEventArgs<ObjectType>> ItemRemoved;

   //    protected virtual void OnCleared()
   //    {
   //        if (Cleared != null)
   //            Cleared(this, new EventArgs());
   //    }

   //     protected virtual void OnItemAdded(ObjectType item)
   //     {
            
   //         if (ItemAdded != null)
   //         {
   //             ItemEventArgs<ObjectType> iea = new ItemEventArgs<ObjectType>(item);
   //             ItemAdded(this, iea);
   //         }
   //     }

   //     protected virtual void OnItemRemoved(ObjectType item)
   //     {

   //         if (ItemRemoved != null)
   //         {
   //             ItemEventArgs<ObjectType> iea = new ItemEventArgs<ObjectType>(item);
   //             ItemRemoved(this, iea);
   //         }
   //     }

   // }


}
